/**
 * 
 */
package com.atozsoft.commonutil;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import com.eos.system.annotation.Bizlet;

import commonj.sdo.DataObject;

/**
 * 共通处理类
 * 
 * @author houfy
 * @date 2014-08-21
 *
 */
@Bizlet("Util")
public class Util {
	
	/**
	 * 是否以XX开头
	 * @author chenhe
	 * @param str 字符串
	 * @param pre 前缀
	 * @return
	 */
	@Bizlet("startWith")
	public static Boolean startWith(String str, String pre) {
		if(str.startsWith(pre)) {
			return true;
		}
		return false;
	}
	
	/**
	 * 安全取得字符串
	 * @param objInput 输入的对象
	 * @return 转换后的字符串
	 * <P>作成者：houfy
	 * <P>作成日：2014-08-21
	 */
	public static String getSafeString(Object objInput) {

		// 空字符串
		String strRtn = "";
		// 输入的字符串不为空也不为NULL时，去空格输出
		if (isNotEmpty(objInput)) {
			// 原字符串去空格
			strRtn = objInput.toString().trim();
		}
		
		// 转换后的字符串
		return strRtn;
	}
	
	/**
	 * 判断输入对象是否不为空 
	 * @param objInput 输入对象 
	 * @return (false:输入对象为空;true:输入对象不为空）
	 * <P>作成者：houfy
	 * <P>作成日：2014-08-21
	 */
	public static boolean isNotEmpty(Object objInput) {
		// 返回值
		boolean blnRtn = false;
		// 空字符串
		String strBlank = "";

		// 输入的字符串不为空也不为NULL时
		if ((objInput != null) && (!strBlank.equals(objInput))) {
			// 原字符串去空格
			blnRtn = true;
		}

		return blnRtn;
	}
	
	/**
	 * 获取当前实体编码的最大值（不带年份）
	 * @param pre 输入对象 
	 * @param id 输入对象 
	 * @param length 流水号长度 
	 * @return 当前实体编码
	 * <P>作成者：houfy
	 * <P>作成日：2014-08-22
	 * <P>修改者：sunsl
	 * <P>修改日：2014-08-25
	 * <P>修改日：2015-06-04
	 */
	@Bizlet("getNextId")
	public String getNextId(String pre, Object id, int length) {
		String nextId="";
		if(isEmpty(id)){
			for(int i=0;i<length-1;i++){
				nextId+="0";
			}
			nextId=pre+nextId+"1";
		}else{
			// 判断最大ID是否包含前缀
			if(String.valueOf(id).contains(pre)){
				nextId=pre+String.valueOf(Integer.parseInt(("1"+String.valueOf(id).substring(pre.length())))+1).substring(1);
			}
			else{
				// 获取初始大小
				int lengthIdInt = new Double(Math.pow(10, length)).intValue();
				// 累加获取下一ID
				int nextIdInt = lengthIdInt + Integer.parseInt(String.valueOf(id));
				nextId=pre+String.valueOf(nextIdInt).substring(1);
			}
		}
		return nextId;
	}
	
	/**
	 * 获取当前实体编码的最大值(带年份)
	 * @param pre 输入对象(BU公司名缩写)
	 * @param id 输入对象 
	 * @return 当前实体编码
	 * <P>作成者：houfy
	 * <P>作成日：2014-08-22
	 * <P>修改者：sunsl
	 * <P>作成日：2014-08-25
	 */
	@Bizlet("getNextId")
	public String getNextId(String pre, Object id) {
		String nextId="";

		Calendar c = Calendar.getInstance();
		int year = c.get(Calendar.YEAR); 
		
		if(isEmpty(id)){
			nextId=pre+String.valueOf(year)+"00001";
		}else{
			nextId=pre+String.valueOf(year)+String.valueOf(Integer.parseInt(("1"+String.valueOf(id).substring(pre.length()+4)))+1).substring(1);
		}
		return nextId;
	}
	
	/**
	 * 判断输入对象是否为空 
	 * @param objInput 输入对象 
	 * @return (false:输入对象为空;true:输入对象不为空）
	 * <P>作成者：houfy
	 * <P>作成日：2014-08-21
	 */
	@Bizlet("isEmpty")
	public static boolean isEmpty(Object obj){
		if(obj==null||obj.equals("")||obj.equals("null")){
			return true;
		}
		return false;
	}
	
	 /**
     * 获取当前最大历史版本号+1
     * @param strKey
     * @return 当前版本号
     * @author houfy
     * @date 2014-08-25
     */
    @Bizlet("getCurrentHistory")
    public String getCurrentHistory(String strKey) {
		if (strKey == null || strKey.equals("") ) {
			strKey = "001";
		}  else {
			strKey = String.valueOf(Integer.valueOf(strKey.trim())+ 1);
			strKey = "000".concat(strKey).substring(strKey.length());
		}
		return strKey; 
    }
    

    /**
     * 设置前缀（带年份）
     * @param pre
     * @return
	 * <P>作成者：sunsl
	 * <P>作成日：2014-08-25
     */
	@Bizlet("setPre")
	public static String setPre(String pre) {
		String nextId="";

		Calendar c = Calendar.getInstance();
		int year = c.get(Calendar.YEAR); 
		
		nextId=pre+String.valueOf(year);
		
		return nextId;
	}
	
	/**
     * 获取常量
     * @param key
     * @return
	 * <P>作成者：sunsl
	 * <P>作成日：2014-09-04
     */
	@Bizlet("getConstants")
	public static String getConstants(String key){
		String value = "";
		
		return value;
	}
	
	/**
	 * 根据总页数、每页记录数、当前页记录数计算总记录数
	 * @param totalPage 总页数
	 * @param length 每页记录数
	 * @param size 当前页记录数
	 * @return
	 * <P>作成者：sunsl
	 * <P>作成日：2014-09-025
	 */
	@Bizlet("computeTotal")
	public static int computeTotal(int totalPage, int length, int size){
		int total = 0;
		total = length * (totalPage - 1) + size;
		return total;
	}
	
	/**
	 *  连接字符串
	 * @param joinStr 连接的符
	 * @param obj 数据
	 * @param propertName 属性名
	 * @return
	 */
	@Bizlet("getConcatPropertStr")
	public String getConcatPropertStr(String joinStr, DataObject[] obj, String propertName) {
		String concatStr="";
		if(obj!=null)
		{
			for(DataObject data : obj)
			{	
				concatStr=concatStr+ getObjectStr(data.get(propertName)) +joinStr;
			}
			if(concatStr.length()>0)
			{
				concatStr=concatStr.substring(0, concatStr.length()-1);
			}
		}
		return concatStr;
	}
	
	/**
	 *  连接字符串
	 * @param joinStr 连接的符
	 * @param obj 数据
	 * @param propertName 属性名
	 * @return
	 */
	@Bizlet("getBuIdConcatPropertStr")
	public String getBuIdConcatPropertStr(String joinStr, DataObject[] obj, String propertName) {
		String concatStr="";
		if(obj!=null)
		{
			for(DataObject data : obj)
			{	
				concatStr=concatStr+ "\'" +getObjectStr(data.get(propertName)) + "\'" +joinStr;
			}
			if(concatStr.length()>0)
			{
				concatStr=concatStr.substring(0, concatStr.length()-1);
			}
		}
		return concatStr;
	}
	
	/**
	 *  连接字符串
	 * @param joinStr 连接的符
	 * @param obj 数据
	 * @param propertName 属性名
	 * @return
	 */
	@Bizlet("getIdConcatPropertStr")
	public String getIdConcatPropertStr(String joinStr, DataObject[] obj, String propertName) {
		String concatStr="";
		if(obj!=null)
		{
			for(DataObject data : obj)
			{	
				concatStr=concatStr + getObjectStr(data.get(propertName)) + joinStr;
			}
			if(concatStr.length()>0)
			{
				concatStr=concatStr.substring(0, concatStr.length()-1);
			}
		}
		return concatStr;
	}
	
	/**
	 * 获取字符串
	 * @param obj
	 * @return
	 */
	private String getObjectStr(Object obj)
	{
		if(obj==null||obj.equals("")||obj.equals("null")){
			return "";
		}
		else
		{
			return obj.toString();
		}	
	}
	
	/**
	 *  获取有权限的操作者ID
	 * @param obj 数据
	 * @return
	 */
	@Bizlet("getOperatorIds")
	public String getOperatorIds(DataObject[] obj) {
		String concatStr="";
		if(obj!=null)
		{
			for(DataObject data : obj)
			{	
				concatStr=concatStr + getObjectStr(data.get("OPERATORID")) + ",";
			}
			if(concatStr.length()>0)
			{
				concatStr=concatStr.substring(0, concatStr.length()-1);
			}
		}
		return concatStr;
	}
	
	/**
	 *  获取有权限的操作者ID
	 * @param objs BU客户相关实体数组
	 * @param customerId 集团客户Id
	 * @return
	 */
	@Bizlet("getBuCustomerIds")
	public String getBuCustomerIds(DataObject[] objs,String customerId) {

		String concatStr="";
		if(objs!=null)
		{
			for(DataObject data : objs)
			{	
				if(customerId.equals(data.getString("PARENTID"))){
					int indexNum = data.getString("CUSTOMERID").indexOf(".");
					String buCustomerId = data.getString("CUSTOMERID").substring(0, indexNum);
					concatStr=concatStr + buCustomerId + ",";
				}
				
			}
			if(concatStr.length()>0)
			{
				concatStr=concatStr.substring(0, concatStr.length()-1);
			}
		}
		return concatStr;
	}
	
	/**
	 * 获取指定格式的当前日期字符串
	 * @param format 指定格式
	 * @return
	 * @author chenhe
	 */
	@Bizlet("getCurrentDateStr")
	public String getCurrentDateStr(String format) {
		// 获取当前时间
		Timestamp currentDate = new Timestamp(System.currentTimeMillis());
		// 获取格式化日期类
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		// 获取当前时间的字符串格式
		String dateStr = sdf.format(currentDate);
		return dateStr;
	}
}
